
package com.dp1.pucp.Ventas.Controlador;

import CharliesCookies.MainController;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import com.dp1.pucp.Modelo.Clases.Cliente;
import com.dp1.pucp.Seguridad.DAO.LogDAO;
import com.dp1.pucp.Util.Validaciones;

import com.dp1.pucp.Ventas.DAO.*;
import com.dp1.pucp.Ventas.VIsta.*;
import java.util.ArrayList;
import javax.swing.JOptionPane;

public class MantClienteControlador {

    public ClienteDAO dao;
    public MantClienteGUI2 mantClienteView;
    public ArrayList<Cliente> listaCliente;
    private ArrayList<String> listaEstado;

    
    public MantClienteControlador(ClienteDAO dao, MantClienteGUI2 view) {
        this.dao = dao;
        this.mantClienteView = view;

        this.mantClienteView.addNuevoListener(new crearClienteListener(this));
        this.mantClienteView.addBuscarListener(new buscarClientesListener());
        this.mantClienteView.addEditarListener(new editarClienteListener(this));
        this.mantClienteView.addEliminarListener(new eliminarClienteListener());
        this.mantClienteView.addLimpiarListener(new limpiarClienteListener());
        this.llenarEstadoCombo();

    }

    
    class crearClienteListener implements ActionListener {

        MantClienteControlador controlador;
        
        public crearClienteListener(MantClienteControlador controlador){
            this.controlador = controlador;
        }
        @Override
        public void actionPerformed(ActionEvent e) {
            ClienteGUI p = new ClienteGUI(mantClienteView.getPadre(), true);
            ClienteControlador c = new ClienteControlador(dao, p, null, controlador);
            LogDAO.insertarLog(MainController.usuario, "Ingresar Agregar Cliente");
            
            p.setVisible(true);
        }
    }

    class buscarClientesListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            int estado = mantClienteView.getEstado();
            String nombre = mantClienteView.getRazonSocial();
            int codigo = mantClienteView.getCodigo(); // 0 o 1 o 2
            
            listaCliente = dao.listarCliente(estado, codigo, nombre);
            mantClienteView.llenaGrilla(listaCliente);

        }
    }

    private void llenarEstadoCombo() {
        listaEstado = dao.listarEstado();
        mantClienteView.llenaComboEstado(listaEstado);
    }

    
    class editarClienteListener implements ActionListener {

        MantClienteControlador controlador;
        
        public editarClienteListener (MantClienteControlador controlador){
                this.controlador = controlador;
        }      
                
        @Override
        
        public void actionPerformed(ActionEvent e) {
            int indice = mantClienteView.getFilaSel();
            if (indice != -1) {
                ClienteGUI clienteGUI = new ClienteGUI(mantClienteView.getPadre(), true);
                Cliente cliente = listaCliente.get(indice);
                ClienteControlador c = new ClienteControlador(dao, clienteGUI, cliente, controlador);
                LogDAO.insertarLog(MainController.usuario, "Salir Editar Cliente");
            
                clienteGUI.setVisible(true);

            }
            else{
                Validaciones.mostrarMensajeErrorVal("Debe seleccionar un cliente");
            }
        }
    }

    class limpiarClienteListener implements  ActionListener{
        @Override
        public void actionPerformed(ActionEvent e){
            mantClienteView.limpiar();
            int size = listaCliente.size();
            for (int i=0; i<size; i++){
                listaCliente.remove(0);
            }
            mantClienteView.llenaGrilla(listaCliente);
        }
    }
    
    class eliminarClienteListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            String[] lista = {"Sí", "No"};
            int sel = mantClienteView.getFilaSel();
            if (sel != -1) {
                Cliente u = listaCliente.get(sel);
                if (u.getEstado() == 1) {
                    if (JOptionPane.showOptionDialog(mantClienteView, "¿Desea eliminar a este cliente?",
                            "Elimiar Cliente", JOptionPane.YES_NO_OPTION, 0, null, lista, lista[1]) == 0) {

                        u.setEstado(0);
                        dao.guardarCliente(u);
                        LogDAO.insertarLog(MainController.usuario, "Eliminar Cliente");
            
                        JOptionPane.showMessageDialog(mantClienteView, "Se dio de baja al cliente con éxito");
                        listaCliente = dao.listarCliente(1);
                        mantClienteView.llenaGrilla(listaCliente);

                    }
                } else {
                    JOptionPane.showMessageDialog(mantClienteView, "El cliente ya esta inactivo");

                }
            } else {

                JOptionPane.showMessageDialog(mantClienteView, "Debe seleccionar un cliente");
            }
        }
    }
}
